package static关键字的使用;
/*
* static关键字的使用
* 1.static : 静态的
* 2. static可以用来修饰:属性、方法、代码块、内部类 //随着类的加载而加载
* 3. 使用static修饰属性:  静态变量
*      3.1属性，按是否使用static修饰，又分为:静态属性 vs 非静态属性(实例变量)
*            实例变量:我们创建了类的多个对象，每个对象都独立的拥有一套类中的非静态属性，当修改其中一个对象的
*                    非静态属性时，不会导致其他对象中同样的属性值的修改。
*            静态变量：我们创建了类的多个对象，多个对象共享同一个静态变量，当通过某一个对象修改静态变量时，会
*                     导致其他对象调用此静态变量时，是发生修改过了的。
*      3.2 static 修饰属性的其他说明
*                ① 静态变量随着类的加载而加载，可以通过"类.静态变量"的方式调用
*                ② 静态变量的加载要早于对象的创建
*                ③ 由于类只会加载一次，则静态变量在内存中也只会存在一份，存在方法区的静态域中。
*      3.3 静态属性举例:System.out;Math.PI;
* 4.使用static修饰方法 ：静态方法
*   ①随着列的加载而加载，可以通过"类.静态方法"的方式进行调用
*   ② 静态方法中，只能调用静态的方法或属性
*      非静态方法中，既可以调用非静态和方法或属性，也可以调用静态的方法或属性
* 5. static注意点：
*   5.1 在静态的方法内，不能使用this super关键字
*   5.2 关于静态属性和静态方法的使用，
* 6. 开发中，如何确定一个属性是否要声明为static的?
*     》属性是可以被多个对象所共享的，不会随着对象的不同而不同
*
*    开发中，如何确定一个方法是否要声明为static的？
*          》操作静态属性的方法，通产设置为static的
*          》工具类中方法，习惯上声明static。比如Math Arrays
*
*
* */
public class StaticTest {
    public static void main(String[] args) {
        Cest cest = new Cest();
        cest.age=20;
        cest.name="Java";
        cest.nation = "python";
        Cest cest1=new Cest();
        cest1.name="前端";
        cest1.age=20;
        cest1.nation="C++";
        System.out.println(cest.nation);

        cest1.eat();
        Cest.eat();
        cest1.show();
//        Cest.show();不能使用类调用，因为不是静态方法

    }
}
class Cest{
    static String nation;
    public int age;
    public String name;
    public static void eat(){//随着类的加载而加载
        System.out.println("中国人吃中餐");
    }
     public void show(){
         System.out.println("什么");
     }
}